package com.itlong.cloud.operate.dao;

import com.itlong.cloud.POJO.PO.AppUserReadPushRecordPO;
import com.itlong.cloud.POJO.PO.PushInfoPO;
import com.itlong.cloud.POJO.PO.PushInfoProjectPO;
import com.itlong.cloud.POJO.VO.operate.OperateAppPushDataVO;
import com.itlong.cloud.POJO.VO.operate.OperateProjectInfoVO;
import com.itlong.cloud.POJO.VO.operate.OperatePushInfoOneVO;
import com.itlong.cloud.POJO.VO.operate.OperatePushInfoVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <desc>
 *     运营-运营管理-消息推送数据访问接口。
 * <desc/>
 *
 * @createDate 2017/9/28.
 */
@Mapper
@Repository
public interface IOperatePushInfoDao {

     /**
      * <desc>
      *      保存推销消息信息。
      * <desc/>
      *
      * @param params
      * @return 返回影响行数
      * @author shengen.T
      * @createDate 2017/9/28
      */
    Integer save(Map<String,Object> params);

     /**
      * <desc>
      *      修改推送消息信息。
      * <desc/>
      *
      * @param  params
      * @return
      * @author shengen.T
      * @createDate 2017/9/28
      */
    Integer update(Map<String,Object> params);

     /**
      * <desc>
      *      删除推送消息。
      * <desc/>
      *
      * @param pushInfoIds 消息ID列表
      * @return 返回影响行数
      * @author shengen.T
      * @createDate 2017/9/28
      */
    Integer delete(@Param("pushInfoIds")String[] pushInfoIds);

     /**
      * <desc>
      *      根据消息ID获取详细信息。
      * <desc/>
      *
      * @param  pushInfoId 消息ID
      * @return
      * @author shengen.T
      * @createDate 2017/9/28
      */
     OperatePushInfoOneVO getOne(@Param("pushInfoId") String pushInfoId);

    /**
     * <desc>
     *      根据消息ID获取映射项目信息列表。
     * <desc/>
     *
     * @param  pushInfoId 消息ID
     * @return
     * @author shengen.T
     * @createDate 2017/9/28
     */
    List<OperateProjectInfoVO> getProjectList(@Param("pushInfoId") String pushInfoId);


    /**
      * <desc>
      *      获取消息推送列表。
      * <desc/>
      *
      * @param params
      * @return  返回推送消息列表
      * @author shengen.T
      * @createDate 2017/9/28
      */
    List<OperatePushInfoVO> getPage(Map<String,Object> params);

     /**
      * <desc>
      *      获取查询结果总记录数。
      * <desc/>
      *
      * @param params
      * @return
      * @author shengen.T
      * @createDate 2017/9/28
      */
    Integer getPageCount(Map<String,Object> params);


     /**
      * <desc>
      *      获取所有允许推送。
      * <desc/>
      *
      * @param  nowTime 系统当前时间
      * @return
      * @author shengen.T
      * @createDate 2017/10/26
      */
    List<OperatePushInfoVO> getEnabledPushInfoList(Date nowTime);

     /**
      * <desc>
      *      批量设置推送状态。
      * <desc/>
      *
      * @param  pushInfoIds 消息推送ID列表
      * @param  status 消息推送状态 1推送 2待推送 3已过期
      * @return
      * @author shengen.T
      * @createDate 2017/10/26
      */
     Integer setStatus(@Param("pushInfoIds")String[] pushInfoIds,@Param("status") Integer status);

     /**
      * <desc>
      *      获取当前时间某项目允许推送的最新推送消息
      * <desc/>
      *
      * @param projectId 项目id
      * @param nowTime 当前时间
      * @return
      * @author Chunjian.G
      * @createDate 2017-11-08
      */
     List<String> getLatestPushContent(@Param("projectId") String projectId,
                                 @Param("nowTime") Date nowTime);

      /**
       * <desc>
       *      获取过期消息ID列表。
       * <desc/>
       *
       * @param  nowTime 当前时间
       * @return
       * @author shengen.T
       * @createDate 2017-12-04
       */
     List<String> getOverDatePushIdList(@Param("nowTime") Date nowTime);



    /**
     * <desc>
     *      批量删除消息项目关系表。
     * <desc/>
     *
     * @param pushInfoIds
     * @return
     * @author shengen.T
     * @createDate 2017-12-09
     */
    Integer deleteBatch(@Param("pushInfoIds") String[] pushInfoIds);

    /**
     * <desc>
     *      批量删除app用户读取推送（系统消息，小区通知）记录
     * <desc/>
     *
     * @param pushInfoIds 消息id数组
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2019/06/20
     */
    Integer deleteAppReadPushBatch(@Param("pushInfoIds") String[] pushInfoIds);

    /**
     * <desc>
     *      获取当前时间某项目允许推送的最新推送消息标题
     * <desc/>
     *
     * @param projectId 项目id
     * @return
     * @author Juguang.S
     * @createDate 2019-08-28
     */
    List<String> getLatestPushTitle(@Param("projectId") String projectId,
                                      @Param("nowTime") Date nowTime);

    /**
     * <desc>
     *      查询今天已经创建的云空间服务费到期提醒信息数量
     * <desc/>
     *
     * @param projectId 项目id
     * @return 信息数量
     * @author wangzhi
     * @createDate 2019/11/29
     */
    Integer getPushInfoTodayCount(@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取app历史版本号列表
     * </desc>
     *
     * @author wangzhi
     * @createDate 2020/04/29
     */
    List<String> getAppVersionList();

    /**
     * <desc>
     *      获取复制数据接口执行标记
     * </desc>
     *
     * @author wangzhi
     * @createDate 2020/04/29
     */
    PushInfoPO getExecuteMark();

    /**
     * <desc>
     *      获取所有待复制的app推送数据
     * </desc>
     *
     * @author wangzhi
     * @createDate 2020/04/29
     */
    List<OperateAppPushDataVO> getAppPushData();

    /**
     * <desc>
     *      批量添加推送数据
     * </desc>
     *
     * @author wangzhi
     * @createDate 2020/04/29
     */
    Integer batchSavePushInfo(List<PushInfoPO> pushInfoPOList);

    /**
     * <desc>
     *      批量添加推送项目数据
     * </desc>
     *
     * @author wangzhi
     * @createDate 2020/04/29
     */
    Integer batchSavePushInfoProject(List<PushInfoProjectPO> pushInfoProjectPOList);

    /**
     * <desc>
     *      批量添加用户读取推送数据
     * </desc>
     *
     * @author wangzhi
     * @createDate 2020/04/29
     */
    Integer batchSavePushInfoRead(List<AppUserReadPushRecordPO> appUserReadPushRecordPOList);
}
